package com.example.employeemanagement.mapper;

import com.example.employeemanagement.entry.Role;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Optional;

@Mapper
public interface RoleMapper {
    /**
     * 获取所有角色
     * @return 角色列表
     */
    @Select("SELECT * FROM role")
    List<Role> getAllRoles();

    /**
     * 根据ID获取角色
     * @param id 角色ID
     * @return 角色信息
     */
    @Select("SELECT * FROM role WHERE roleId = #{id}")
    Role getRoleById(@Param("id") Integer id);

    /**
     * 根据角色名称获取角色
     * @param roleName 角色名称
     * @return 角色信息
     */
    @Select("SELECT * FROM role WHERE roleName = #{roleName}")
    Role getRoleByName(@Param("roleName") String roleName);

    /**
     * 添加角色
     * @param role 角色信息
     * @return 影响的行数
     */
    @Insert("INSERT INTO role (roleName, description) VALUES (#{roleName}, #{description})")
    @Options(useGeneratedKeys = true, keyProperty = "roleId")
    int addRole(Role role);

    /**
     * 更新角色
     * @param id 角色ID
     * @param role 更新的角色信息
     * @return 影响的行数
     */
    @Update("UPDATE role SET roleName = #{role.roleName}, description = #{role.description} WHERE roleId = #{id}")
    int updateRole(@Param("id") Integer id, @Param("role") Role role);

    /**
     * 删除角色
     * @param id 角色ID
     * @return 影响的行数
     */
    @Delete("DELETE FROM role WHERE roleId = #{id}")
    int deleteRole(@Param("id") Integer id);

    /**
     * 检查角色ID是否存在
     * @param id 角色ID
     * @return 是否存在
     */
    @Select("SELECT COUNT(*) > 0 FROM role WHERE roleId = #{id}")
    boolean existsById(@Param("id") Integer id);
}